package com.wwdx.model.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.common.util.ToStringUtils;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * @author liguoliang
 * @date 2018/4/23 10:34
 */
public abstract class BasePayDTO {

    /**
     * 支付前验证
     */
    @Data
    public static class PayModel implements Serializable {
        private String orderno;
        private String productName;
        private String productdetails;
        private BigDecimal productPrice;
        private String error;
    }

    /**
     * 支付后回调
     */
    @Data
    public static class PayCallBackDTO implements Serializable{
        /**
         * 订单号
         */
        private String tradeNo;
        /**
         * 商户数据包
         */
        private String attach;
    }

    /**
     * 京东充值
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class JdPayDTO implements Serializable{
        /**
         * 签名
         */
        private String sign;
        /**
         * 签名加密算法
         */
        private String signType;
        /**
         * 访问时间戳
         */
        private String timestamp;
        /**
         * 版本
         */
        private String version;
        /**
         * 京东订单号
         */
        private String jdOrderNo;
        /**
         * 订单类型
         */
        private Integer type;
        /**
         * 清算时间
         */
        private String finTime;
        /**
         * 回调地址
         */
        private String notifyUrl;
        /**
         /**
         * 充值类型为直充时购买商品数量只能为1
         */
        private Integer quantity;
        /**
         * 商品编号
         */
        private String wareNo;
        /**
         * 成本价
         */
        private Long costPrice;
        /**
         * 结果 T F
         */
        private String isSuccess;
        /**
         * 返回状态码
         */
        private String errorCode;
        /**
         * 代理商订单号
         */
        private String agentOrderNo;
        /**
         * 代理商价格
         */
        private Long agentPrice;
        /**
         * 代理商在京东的ID(由京东分配)
         */
        private String agentId;
        /**
         * 业务编码（由京东分配）
         */
        private String bussType;
        /**
         * 充值结果
         */
        private Integer status;
        /**
         * 充值时间：格式：yyyyMMddHHmmss
         */
        private String time;
        /**
         * 格式：卡账号_卡密码_有效期（格式yyyyMMdd），购买多个以“|”分隔
         *   1：卡密信息需加密传输，加密方式：AES
         *   2：状态不为成功时可不传
         *   3：充值类型为直充时可不传
         */
        private String cardInfo;

        @Override
        public String toString() {
            return ToStringUtils.toSimpleString(this);
        }
    }

    public enum JdOrderState{
        /**
         * 传入参数不正确（可退款）
         */
        JDI_00001(1,"传入参数不正确"),
        /**
         * 签名验证不正确（可退款）
         */
        JDI_00002(2,"签名验证不正确"),
        /**
         * 没有对应商品（可退款）
         */
        JDI_00003(3,"没有对应商品"),
        /**
         *  此商品不可售（可退款）
         */
        JDI_00004(4,"此商品不可售"),
        /**
         * 成本价不正确（可退款）
         */
        JDI_00005(5,"成本价不正确"),
        /**
         * 系统错误
         */
        JDI_00010(6,"系统错误"),
        /**
         * 没有对应订单 1，2，7
         */
        JDI_00007(7,"没有对应订单"),
        /**
         * 商家不存在
         */
        JDO_00001(8,"商家不存在"),
        /**
         * IP没有权限
         */
        JDO_10002(9,"IP没有权限"),
        /**
         * 参数错误
         */
        JDO_10003(10,"参数错误"),
        /**
         * 签名错误
         */
        JDO_10004(11,"签名错误"),
        /**
         * 对应状态不存在
         */
        JDO_10005(12,"对应状态不存在"),
        /**
         * 此订单不存在
         */
        JDO_10006(13,"此订单不存在"),
        /**
         * 代理商ID不正确
         */
        JDO_10007(14,"代理商ID不正确"),
        /**
         * 京东订单状态不正确
         */
        JDO_10008(15,"京东订单状态不正确"),
        /**
         * 订单处理失败
         */
        JDO_10009(16,"订单处理失败"),
        /**
         * 系统异常
         */
        JDO_10000(17,"系统异常");

        int code;
        String msg;

        JdOrderState(int code,String msg) {
            this.code = code;
            this.msg = msg;
        }

        public String getName(int code) {
            for (JdOrderState e : values()) {
                if (e.getCode() == code) {
                    return e.name();
                }
            }
            return null;
        }

        public int getCode() {
            return code;
        }

        public void setCode(int code) {
            this.code = code;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }
    }
}